/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package iagente;

import java.awt.Insets;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JOptionPane;

/**
 *
 * @author Note
 */
public class Dibujo extends JButton{
    // Tipos de Atributos
	private static Icon agente;
	private static Icon pozo;
	private static Icon meta;
	private static Icon neutro;
	private static Icon pared;
        private static Icon mala;
        private static Icon buena;
        private static Icon excelente;
	private static Icon[] animacionfinal;
	private static boolean imagenescargadas = false; 
	private static boolean agenteEnPosicion	= false;
	
	//Indice del Icono[]
	private int index;
	private static int animIndex = 0;

        // Carga de las imagenes desde un path
	public void cargarImagen(){
		if(!imagenescargadas){
			agente 	  = new ImageIcon(getClass().getResource("/iagente/agente.png"));
			pozo	  = new ImageIcon(getClass().getResource("/iagente/pozo.png"));
			meta      = new ImageIcon(getClass().getResource("/iagente/meta.png"));
			neutro    = new ImageIcon(getClass().getResource("/iagente/neutro.png"));
			pared	  = new ImageIcon(getClass().getResource("/iagente/pared.png"));
                        mala	  = new ImageIcon(getClass().getResource("/iagente/mala.png"));
                        buena	  = new ImageIcon(getClass().getResource("/iagente/bueno.png"));
                        excelente = new ImageIcon(getClass().getResource("/iagente/excelente.png"));
			
			animacionfinal	  = new ImageIcon[5];
			animacionfinal[0] = new ImageIcon(getClass().getResource("/iagente/final1.png"));
			animacionfinal[1] = new ImageIcon(getClass().getResource("/iagente/final2.png"));
			animacionfinal[2] = new ImageIcon(getClass().getResource("/iagente/final3.png"));
			animacionfinal[3] = new ImageIcon(getClass().getResource("/iagente/final4.png"));
			animacionfinal[4] = new ImageIcon(getClass().getResource("/iagente/final5.png"));
			
			imagenescargadas = true; 
			System.out.println("Todas las imagenes se cargaron sin problemas.");
		}
	}

	public Dibujo(int index){
		this.index = index;
		cargarImagen(); 
		crearIcono();
	}
        
	public static boolean agenteListo(){
		return agenteEnPosicion;
	}
	
	public static void resetearAgenteListo() {
		animIndex = 0;
		agenteEnPosicion = false;
	}
        
       
      // Dibujar los iconos dependiendo de los caracteres de la matriz creada en interfaz
	public void dibujarIcono()
	{
		//Neutro
		 if(Interfaz.getMapa().map[index] == MatrizQ.NEUTRO)
			setIcon(neutro);
			
		// Meta
		else if(Interfaz.getMapa().map[index] == MatrizQ.FINAL)
			setIcon(meta);
		
                //Pared
                else if(Interfaz.getMapa().map[index] == MatrizQ.PARED)
			setIcon(pared);
			
		// Agente
		else if(Interfaz.getMapa().map[index] == MatrizQ.AGENTE)
			setIcon(agente);
                
                //Buena
                else if(Interfaz.getMapa().map[index] == MatrizQ.BUENA)
			setIcon(buena);
                
                //Mala
                else if(Interfaz.getMapa().map[index] == MatrizQ.MALA)
			setIcon(mala);
                
                //Excelente
                else if(Interfaz.getMapa().map[index] == MatrizQ.EXCELENTE)
			setIcon(excelente);
		
		
		//Animacion Final
		else if(Interfaz.getMapa().map[index] == MatrizQ.LLEGADAFINAL)
		{
			int newIndex = animIndex % 19;
			
			if(newIndex < 5)
				setIcon(animacionfinal[0]);
			else if(newIndex < 7)
				setIcon(animacionfinal[newIndex - 4]);
			else if(newIndex < 14)
				setIcon(animacionfinal[3]);
			else if(newIndex < 19)
				setIcon(animacionfinal[4]);
			
			animIndex++;
		}
	}
        
        private void crearIcono()
	{
		this.setBorderPainted(true);
		this.setMargin(new Insets(0,0,0,0));
		this.setHorizontalTextPosition(0);
		this.setVerticalTextPosition(0);
		this.addMouseListener
		(
			new MouseListener(){
                                @Override
				public void mousePressed(MouseEvent event) {                
				}

                                @Override
				public void mouseClicked(MouseEvent event) {
							
						//Dibujar en el mapa el atributo seleccionado
                                                if(!agenteEnPosicion && !MatrizQ.aprendio){
                                                    boolean estadofinalsimulacion = false;
                                                      switch (Interfaz.getEstado()){
                                                          
                                                          case 0: Interfaz.getMapa().setMap(index, 'E');break;
                                                                                                                        
                                                          case 1: Interfaz.getMapa().setMap(index, 'B');break;
                                                             
                                                          case 2: Interfaz.getMapa().setMap(index, 'M');break;
                                                        
                                                          case 3: Interfaz.getMapa().setMap(index, '#');break;
                                                              
                                                          case 4: for (int i = 0; i<Interfaz.tamaño;i++){
                                                                    if(Interfaz.mapa.map[i] == MatrizQ.FINAL){
                                                                            estadofinalsimulacion = true;}
                                                                    } 
                                                                    if (estadofinalsimulacion){
                                                                            Interfaz.getMapa().setMap(index, ' ');break;
                                                                         }else{
                                                                                Interfaz.getMapa().setMap(index, 'G');};break;
                                                              
                                                          case 5: Interfaz.getMapa().setMap(index, ' ');break;
 
                                                      }
                                                      dibujarIcono();
                                                }
                                                
                                        //Si el agente no esta en posicion y ya se aprendio puedo posicionar el agente
					if(!agenteEnPosicion && MatrizQ.aprendio)
					{
						
							Interfaz.getMapa().setMap(index, MatrizQ.AGENTE);
                                                        dibujarIcono();
							agenteEnPosicion = true;      
					}
						
                            }
                                @Override
				public void mouseReleased(MouseEvent event) {/* EMPTY */}
                                @Override
				public void mouseEntered(MouseEvent event) {/* EMPTY */}
                                @Override
				public void mouseExited(MouseEvent event){/* EMPTY */}
			}
		);
	}

 
        
        
        
        
        
        
        
        
        
}
